#!/usr/bin/python
# -*- coding:utf-8 -*-
# 第 50 条: 用包来安排模块，并提供稳固的 API

# Python 包是一种含有其他模块的模块。我们可以用包把代码划分成各自独立且互不冲突的名称空间，
#   使得每块代码都能具备独有的绝对模块名称
# 只要把 __init__.py 文件放入含有其他源文件的目录里，就可以将该目录定义为包。目录中的文件，都将成为包的子模块。
#   该包的目录下面，也可以含有其他包
# 把外界可见的名称，列在名为 __call__ 的特殊属性里，即可为包提供一套明确的 API
# 如果想隐藏某个包的内部实现，那么我们可以在包的 __init__.py 文件中，只把外界可见的那些名称引入进来，
#   或是给权限内部使用的那些名称添加下划线前缀
# 如果软件包只在开发团队或代码库内部使用，那可能没有必要通过 __all__ 来明确地导出 API













